package com.sinba.common.system.dao;

import com.sinba.common.dao.BaseDAOImplHibernate;
import com.sinba.common.dto.PageDTO;
import com.sinba.common.system.dto.OrderDTO;
import com.sinba.common.system.entity.Orders;
import com.sinba.common.util.StringUtils;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

public class OrderDAO
    extends BaseDAOImplHibernate<Orders>
    implements IOrderDAO
{
    public PageDTO findOrderPager( OrderDTO qdto, String sord, String sidx )
    {
        final DetachedCriteria dc = DetachedCriteria.forClass( Orders.class );

        if ( StringUtils.hasText( qdto.getOrderNo(  ) ) )
        {
            dc.add( Restrictions.like( "orderNo",
                                       qdto.getOrderNo(  ),
                                       MatchMode.ANYWHERE ) );
        }

        if ( StringUtils.hasText( qdto.getOdesc(  ) ) )
        {
            dc.add( Restrictions.like( "odesc",
                                       qdto.getOdesc(  ),
                                       MatchMode.ANYWHERE ) );
        }

        if ( StringUtils.hasText( qdto.getLoginName(  ) ) )
        {
            dc.add( Restrictions.like( "loginName",
                                       qdto.getLoginName(  ),
                                       MatchMode.ANYWHERE ) );
        }

        if ( ( sord != null ) && ! sord.equals( "" ) && ( sidx != null ) && ! sidx.equals( "" ) )
        {
            if ( sord.equals( "desc" ) )
            {
                dc.addOrder( Order.desc( sidx ) );
            } else{
                dc.addOrder( Order.asc( sidx ) );
            }
        }

        return super.findPageByCriteria( dc,
                                         qdto.getStart(  ),
                                         qdto.getLimit(  ) );
    }
}
